package cz.jm.web.manhunter.client.registration;

import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;

import cz.jm.web.manhunter.client.services.UserDataServiceAsync;
import cz.jm.web.manhunter.shared.User;

public class RegistrationPresenter extends cz.jm.web.jmlib.client.dialog.registration.RegistrationPresenter {

//	private final RegistrationConstants constants = GWT.create(RegistrationConstants.class);
	
//	private MessagePanel message = MessagePanel.getMessagePanel(MessageType.ERROR, "XXX");
	
//	public interface Display extends FormView {
//		String getMail();
//		String getMailVerification();
//		String getUsername();
//		String getPassword();
//		String getPasswordVerification();
//	}
	
	private UserDataServiceAsync userDataService;
//	private Display view;
	
	public RegistrationPresenter(UserDataServiceAsync userDataService, Display d) {
		super(d);
		this.userDataService = userDataService;

//		bind();
    }
	
//	@Override
//    public void go(Canvas canvas) {
//		canvas.addChild(view.asCanvas());	    
//    }
	

//	protected void bind() {
//		
//		view.getSubmit().addSubmitValuesHandler(new SubmitValuesHandler() {
//			
//			@Override
//			public void onSubmitValues(SubmitValuesEvent event) {
//				if (!view.validate()) return;
//				view.removeMessage(message);
//				
//				User user = new User();
//				user.setMail(view.getMail());
//				user.setUsername(view.getUsername());
//				
//				userDataService.registerUser(user, view.getPassword(), new AsyncCallback<User>() {
//					
//					@Override
//					public void onSuccess(User result) {
//						if (result != null) {							
//							if (result.isValid()) {
//								setViewMessage(MessageType.OK, constants.registrationOk());
//							}
//							else {
//								onRegistrationFailed(result.getState());
//							}
//						}
//						else {
//							onRegistrationFailed(UserState.ERROR);							
//						}
//					}
//					
//					@Override
//					public void onFailure(Throwable caught) {
//						setViewMessage(MessageType.ERROR, constants.registrationError());
//					}
//				});
//			}
//		});
//	}
	
//	public void onRegistrationFailed(UserState state) {	
//		switch (state) {
//			case ERROR:
//				setViewMessage(MessageType.ERROR, constants.registrationError());
//				break;
//			case USERNAME_AND_MAIL_ALREADY_EXISTS:
//				setViewMessage(MessageType.ERROR, constants.registrationFailedUsernameAndMail());
//				break;
//			case USERNAME_ALREADY_EXISTS:
//				setViewMessage(MessageType.ERROR, constants.registrationFailedUsername());
//				break;				
//			case MAIL_ALREADY_EXISTS:
//				setViewMessage(MessageType.ERROR, constants.registrationFailedMail());
//				break;
//			default:				
//				setViewMessage(MessageType.ERROR, constants.registrationError());
//				break;
//		}		
//	}
	
//	protected void setViewMessage(MessageType type, String msg) {
//		view.removeMessage(message);
//		message = MessagePanel.getMessagePanel(type, msg);
//		view.addMessage(message);
//	}

//	@Override
//    public void go(LayoutPanel workingArea) {
//	    // TODO Auto-generated method stub
//	    
//    }

	@Override
    public void register(String username, String password, String mail) {
		User user = new User();
		user.setMail(mail);
		user.setUsername(username);
		
		userDataService.registerUser(user, password, new AsyncCallback<User>() {
			
			@Override
			public void onSuccess(User result) {
				Window.alert("onSuccessRegistration");
				unblockApplication();
//				if (result != null) {							
//					if (result.isValid()) {
//						setViewMessage(MessageType.OK, constants.registrationOk());
//					}
//					else {
//						onRegistrationFailed(result.getState());
//					}
//				}
//				else {
//					onRegistrationFailed(UserState.ERROR);							
//				}
			}
			
			@Override
			public void onFailure(Throwable caught) {
				Window.alert("onFailureRegistration");
				unblockApplication();
				//setViewMessage(MessageType.ERROR, constants.registrationError());
			}
		});
	    
    } 
	
	
	//public void onSuccessRegistration() {}
}
